#include <stdlib.h>
#include <assert.h>
#include "STACK.h"

/**
 * Program 4.4 Array implementation of a pushdown stack
 * ----------------------------------------------------
 * 如何实现push操作？
 * - 将数据存储在top-of-stack索引处，然后自增该索引
 * 如何实现pop操作？
 * - 将top-of-stack索引自减1，返回该索引处的数据。
 * 如何判空？
 * - 检查top-of-stack索引是否为0。
 * ----------------------------------------------------
 */

static Item *s; // 保存数据的数组
static int N;   //栈顶的索引


void STACKinit(int maxN){
    s = malloc(maxN*sizeof(Item));
    assert(s);
    N = 0;
}

int STACKempty(){
    return N == 0;
}

void STACKpush(Item item){
    s[N] = item;
    N++;
}

Item STACKpop(){
    N--;
    return s[N];
}